package com.party.core.service.system;

import com.party.core.model.system.RoleType;
import com.party.core.model.system.SysRole;
import com.party.core.service.IBaseService;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 角色接口
 * 
 * @author Administrator
 *
 */
public interface ISysRoleService extends IBaseService<SysRole> {

	/**
	 * 根据用户查询角色
	 * 
	 * @param memberId
	 * @return
	 */
	List<SysRole> findByMemberId(String memberId);

	/**
	 * 根据会员编号查询
	 * @param memberId 会员编号
	 * @param type 类型
	 * @return 角色集合
	 */
	List<SysRole> findByMemberId(String memberId, Integer type);

	SysRole uniqueProperty(SysRole sysRole);

	/**
	 * 提取角色代码
	 * @param roles 角色集合
	 * @return 代码集合
	 */
	Set<String> extractCode(List<SysRole> roles);

	List<SysRole> getRoleByMemberId(Map<String, Object> params);

    List<SysRole> checkCode(String code, String id);

    List<String> getErrorData(Map<String, Object> params);

	/**
	 * 有达人字段没有达人角色的用户
	 * @return
	 */
	List<String> getNotHasExpert();

	/**
	 * 通过角色代码和类型获取角色
	 *
	 * @param code 角色代码
	 * @param type 类型
	 * @return 系统角色
	 */
	SysRole getRole(String code, Integer type);

	/**
	 * 判断会员是否拥有角色
	 * @param memberId 会员编号
	 * @param roleCode 角色代码
	 * @return 是否拥有（true/false）
	 */
	boolean hasRole(String memberId, String roleCode);

	/**
	 * 是否拥有角色类型
	 * @param memberId 会员编号
	 * @param roleType 会员类型
	 * @return (true/false)
	 */
	boolean hasRoleType(String memberId, RoleType roleType);
}
